package com.gnerv.cms.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gnerv.cms.dto.OrgDTO;
import com.gnerv.cms.dto.OrgSearchDTO;
import com.gnerv.cms.dto.OrgTreeDTO;
import com.gnerv.cms.entity.Org;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 基础平台-组织机构 mapper 接口
 *
 * @author zhang
 * @date 2019/11/30
 **/
@Mapper
public interface OrgMapper extends BaseMapper<Org> {

    /**
     * 添加组织机构信息
     *
     * @param org
     * @return
     */
    boolean createOrg(@Param("org") Org org);

    /**
     * 根据 组织机构id 删除
     *
     * @param orgId
     * @return
     */
    boolean deleteOrg(@Param("orgId") String orgId);

    /**
     * 根据 组织机构id 查询信息
     *
     * @param orgId
     * @return
     */
    OrgDTO selectOrg(@Param("orgId") String orgId);


    OrgDTO selectOrgByUserId(@Param("userId") String userId);

    /**
     * 分页 条件查询 组织机构信息
     *
     * @param page
     * @param search
     * @return
     */
    Page<OrgDTO> listOrg(@Param("page") Page<OrgDTO> page, @Param("search") OrgSearchDTO search);

    /**
     * 根据父id 查询组织机构树
     *
     * @param parentId
     * @return
     */
    List<OrgTreeDTO> listOrgTree(@Param("parentId") String parentId);

    /**
     * 判断机构是否存在下级机构
     *
     * @param orgId
     * @return
     */
    Long hasChildren(@Param("orgId") String orgId);

    /**
     * 组织 绑定 用户
     *
     * @param orgId
     * @param userIds
     * @return
     */
    int bindOrgUser(@Param("orgId") String orgId, @Param("userIds") List<String> userIds);

    /**
     * 组织 解绑 用户
     *
     * @param orgId
     * @return
     */
    int unBindOrgUser(@Param("orgId") String orgId);

    /**
     * 用户 解绑 组织
     *
     * @param userId
     * @return
     */
    int unBindUserOrg(@Param("userId") String userId);

    int updateOrgStatus(@Param("orgId") String orgId, @Param("status") Integer status);
}
